package com.wang.jmonkey.modules.system.api;

import com.wang.jmonkey.common.annotation.Log;
import com.wang.jmonkey.common.result.HttpPageResult;
import com.wang.jmonkey.common.result.HttpResult;
import com.wang.jmonkey.modules.system.model.dto.SystemUserDto;
import com.wang.jmonkey.modules.system.model.param.SystemUserParam;
import com.wang.jmonkey.modules.system.model.param.SystemUserPasswordParam;
import com.wang.jmonkey.modules.system.model.query.SystemUserQuery;
import com.wang.jmonkey.modules.system.service.SystemUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * (SystemUser)表控制层
 *
 * @author HeJiawang
 * @since 2021-05-10 11:06:30
 */
@RestController
@RequestMapping("/user")
public class SystemUserApi {

    /**
     * 服务对象
     */
    @Autowired
    private SystemUserService service;

    /**
     * 分页查询用户信息
     * @param query query
     * @return PageInfo
     */
    @Log("用户管理——分页查询用户信息")
    @GetMapping(value = "/page")
    public HttpPageResult<SystemUserDto> page(SystemUserQuery query) {
        return new HttpPageResult<>(service.page(query));
    }

    /**
     * 新增用户信息
     * @param user 用户信息
     * @return true 新增成功
     */
    @Log("用户管理——新增用户")
    @PostMapping(value = "/save")
    public HttpResult<Void> save(@RequestBody @Validated SystemUserParam user) {
        return new HttpResult<Void>().setSuccess(service.save(user));
    }

    /**
     * 修改用户信息
     * @param user 用户信息
     * @return true 修改成功
     */
    @Log("用户管理——修改用户")
    @PutMapping(value = "/update")
    public HttpResult<Void> update(@RequestBody @Validated SystemUserParam user) {
        return new HttpResult<Void>().setSuccess(service.updateById(user));
    }

    /**
     * 删除用户信息
     * @param id 用户id
     * @return true 删除成功
     */
    @Log("用户管理——删除用户")
    @DeleteMapping(value = "/remove/{id}")
    public HttpResult<Void> remove(@PathVariable Long id) {
        return new HttpResult<Void>().setSuccess(service.removeById(id));
    }

    /**
     * 查看详情
     * @param id 用户id
     * @return 用户信息
     */
    @Log("用户管理——查看详情")
    @GetMapping(value = "/find/{id}")
    public HttpResult<SystemUserDto> find(@PathVariable Long id) {
        return new HttpResult<>(service.getDtoById(id));
    }

    /**
     * 批次删除用户
     * @param userIdList 用户id集合
     * @return true 删除成功
     */
    @Log("用户管理——批次删除用户")
    @DeleteMapping(value = "/removeBatch")
    public HttpResult<Boolean> removeBatch( @RequestParam(value = "userIdList", required=false ) List<Long> userIdList){
        return new HttpResult<>(service.removeBatch(userIdList));
    }

    /**
     * 校验用户登陆名称是否重复
     * @param userParam 用户登陆名称、用户id
     * @return true 用户登陆名称重复
     */
    @PostMapping("/checkUsername")
    public HttpResult<Void> checkUsername(@RequestBody SystemUserParam userParam) {
        return new HttpResult<Void>().setSuccess(service.checkUsername(userParam));
    }

    /**
     * 修改用户密码
     * @param passwordParam 用户密码信息
     * @return true 修改成功
     */
    @Log("用户管理——修改用户密码")
    @PutMapping(value = "/modifyPassword")
    public HttpResult<Boolean> modifyPassword(@RequestBody @Validated SystemUserPasswordParam passwordParam) {
        return service.modifyPassword(passwordParam).convert();
    }

    /**
     * 锁定用户
     * @param id 用户id
     * @return true 锁定成功
     */
    @Log("用户管理——锁定用户")
    @GetMapping(value = "/lock/{id}")
    public HttpResult<Void> lock(@PathVariable Long id) {
        return new HttpResult<Void>().setSuccess(service.lock(id));
    }

    /**
     * 解锁用户
     * @param id 用户id
     * @return true 解锁成功
     */
    @Log("用户管理——解锁用户")
    @GetMapping(value = "/unLock/{id}")
    public HttpResult<Void> unLock(@PathVariable Long id) {
        return new HttpResult<Void>().setSuccess(service.unLock(id));
    }
}
